Enter the directory of the maca folder on your drive and the name of the tissue you want to analyze.
tissue_of_interest = "Tongue"
Load the requisite packages and some additional helper functions.
library(here)
library(useful)
library(Seurat)
library(dplyr)
library(Matrix)
library(ontologyIndex)
cell_ontology = get_ontology('https://raw.githubusercontent.com/obophenotype/cell-ontology/master/cl-basic.obo', extract_tags='everything')
validate_cell_ontology = function(cell_ontology_class){
in_cell_ontology = sapply(cell_ontology_class, function(x) is.element(x, cell_ontology$name))
if (!all(in_cell_ontology)) {
message = paste0('"', cell_ontology_class[!in_cell_ontology], '" is not in the cell ontology
')
stop(message)
}
}
convert_to_cell_ontology_id = function(cell_ontology_class){
return(sapply(cell_ontology_class, function(x) as.vector(cell_ontology$id[cell_ontology$name == x])[1]))
}
save_dir = here('00_data_ingest', 'tissue_robj')
# read the metadata to get the plates we want
plate_metadata_filename = here('00_data_ingest', '00_facs_raw_data', 'metadata_FACS.csv')
plate_metadata <- read.csv(plate_metadata_filename, sep=",", header = TRUE)
colnames(plate_metadata)[1] <- "plate.barcode"
plate_metadata
Subset the metadata on the tissue.
tissue_plates = filter(plate_metadata, tissue == tissue_of_interest)[,c('plate.barcode','tissue','subtissue','mouse.sex')]
tissue_plates
Load the read count data.
#Load the gene names and set the metadata columns by opening the first file
filename = here('00_data_ingest', '00_facs_raw_data', 'FACS', paste0(tissue_of_interest, '-counts.csv'))
raw.data = read.csv(filename, sep=",", row.names=1)
# raw.data = data.frame(row.names = rownames(raw.data))
corner(raw.data)
Make a vector of plate barcodes for each cell
plate.barcodes = lapply(colnames(raw.data), function(x) strsplit(strsplit(x, "_")[[1]][1], '.', fixed=TRUE)[[1]][2])
head(plate.barcodes)
[[1]]
[1] "D041894"
[[2]]
[1] "D041894"
[[3]]
[1] "D041894"
[[4]]
[1] "D041894"
[[5]]
[1] "D041894"
[[6]]
[1] "D041894"
Use only the metadata rows corresponding to Bladder plates. Make a plate barcode dataframe to “expand” the per-plate metadata to be per-cell.
barcode.df = t.data.frame(as.data.frame(plate.barcodes))
rownames(barcode.df) = colnames(raw.data)
colnames(barcode.df) = c('plate.barcode')
head(barcode.df)
plate.barcode
A15.D041894.3_9_M.1.1 "D041894"
B19.D041894.3_9_M.1.1 "D041894"
C21.D041894.3_9_M.1.1 "D041894"
E1.D041894.3_9_M.1.1 "D041894"
F4.D041894.3_9_M.1.1 "D041894"
G7.D041894.3_9_M.1.1 "D041894"
rnames = row.names(barcode.df)
meta.data <- merge(barcode.df, plate_metadata, by='plate.barcode', sort = F)
row.names(meta.data) <- rnames
# Sort cells by plate barcode because that's how the data was originally
meta.data = meta.data[order(meta.data$plate.barcode), ]
corner(meta.data)
raw.data = raw.data[, rownames(meta.data)]
corner(raw.data)
Process the raw data and load it into the Seurat object.
# Find ERCC's, compute the percent ERCC, and drop them from the raw data.
erccs <- grep(pattern = "^ERCC-", x = rownames(x = raw.data), value = TRUE)
percent.ercc <- Matrix::colSums(raw.data[erccs, ])/Matrix::colSums(raw.data)
ercc.index <- grep(pattern = "^ERCC-", x = rownames(x = raw.data), value = FALSE)
raw.data <- raw.data[-ercc.index,]
# Create the Seurat object with all the data
tiss <- CreateSeuratObject(raw.data = raw.data, project = tissue_of_interest,
min.cells = 5, min.genes = 5)
tiss <- AddMetaData(object = tiss, meta.data)
tiss <- AddMetaData(object = tiss, percent.ercc, col.name = "percent.ercc")
# Change default name for sums of counts from nUMI to nReads
colnames(tiss@meta.data)[colnames(tiss@meta.data) == 'nUMI'] <- 'nReads'
# Create metadata columns for cell_ontology_classs and subcell_ontology_classs
tiss@meta.data[,'cell_ontology_class'] <- NA
tiss@meta.data[,'subcell_ontology_class'] <- NA
Calculate percent ribosomal genes.
ribo.genes <- grep(pattern = "^Rp[sl][[:digit:]]", x = rownames(x = tiss@data), value = TRUE)
percent.ribo <- Matrix::colSums(tiss@raw.data[ribo.genes, ])/Matrix::colSums(tiss@raw.data)
tiss <- AddMetaData(object = tiss, metadata = percent.ribo, col.name = "percent.ribo")
A sanity check: genes per cell vs reads per cell.
GenePlot(object = tiss, gene1 = "nReads", gene2 = "nGene", use.raw=T)
Filter out cells with few reads and few genes.
tiss <- FilterCells(object = tiss, subset.names = c("nGene", "nReads"),
low.thresholds = c(500, 50000), high.thresholds = c(25000, 2000000))
Normalize the data, then regress out correlation with total reads
tiss <- NormalizeData(object = tiss, scale.factor = 1e6)
Performing log-normalization
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|
tiss <- ScaleData(object = tiss)
[1] "Scaling data matrix"
|
| | 0%
|
|====================================================================| 100%
tiss <- FindVariableGenes(object = tiss, do.plot = TRUE, x.high.cutoff = Inf, y.cutoff = 0.5)
Calculating gene means
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|
Run Principal Component Analysis.
tiss <- RunPCA(object = tiss, do.print = FALSE)
tiss <- ProjectPCA(object = tiss, do.print = FALSE)
Later on (in FindClusters and TSNE) you will pick a number of principal components to use. This has the effect of keeping the major directions of variation in the data and, ideally, supressing noise. There is no correct answer to the number to use, but a decent rule of thumb is to go until the plot plateaus.
PCElbowPlot(object = tiss)
Choose the number of principal components to use.
# Set number of principal components.
n.pcs = 10
The clustering is performed based on a nearest neighbors graph. Cells that have similar expression will be joined together. The Louvain algorithm looks for groups of cells with high modularity–more connections within the group than between groups. The resolution parameter determines the scale…higher resolution will give more clusters, lower resolution will give fewer.
For the top-level clustering, aim to under-cluster instead of over-cluster. It will be easy to subset groups and further analyze them below.
# Set resolution
res.used <- 0.5
tiss <- FindClusters(object = tiss, reduction.type = "pca", dims.use = 1:n.pcs,
resolution = res.used, print.output = 0, save.SNN = TRUE, force.recalc = TRUE)
To visualize
# If cells are too spread out, you can raise the perplexity. If you have few cells, try a lower perplexity (but never less than 10).
tiss <- RunTSNE(object = tiss, dims.use = 1:n.pcs, seed.use = 10, perplexity=30)
# note that you can set do.label=T to help label individual clusters
TSNEPlot(object = tiss, do.label = T, pt.size = 1.2, label.size = 4)
Check expression of genes of interset.
Dotplots let you see the intensity of exppression and the fraction of cells expressing for each of your genes of interest.
How big are the clusters?
table(tiss@ident)
0 1 2 3 4 5
461 274 194 178 163 124
tiss1=BuildClusterTree(tiss)
[1] "Finished averaging RNA for cluster 0"
[1] "Finished averaging RNA for cluster 1"
[1] "Finished averaging RNA for cluster 2"
[1] "Finished averaging RNA for cluster 3"
[1] "Finished averaging RNA for cluster 4"
[1] "Finished averaging RNA for cluster 5"
marker10=FindAllMarkersNode(tiss1, 10)
| | 0 % ~calculating
|+ | 1 % ~20s
|++ | 2 % ~18s
|++ | 3 % ~18s
|+++ | 4 % ~18s
|+++ | 5 % ~18s
|++++ | 7 % ~18s
|++++ | 8 % ~18s
|+++++ | 9 % ~17s
|+++++ | 10% ~17s
|++++++ | 11% ~17s
|+++++++ | 12% ~17s
|+++++++ | 13% ~17s
|++++++++ | 14% ~16s
|++++++++ | 15% ~16s
|+++++++++ | 16% ~16s
|+++++++++ | 18% ~16s
|++++++++++ | 19% ~15s
|++++++++++ | 20% ~15s
|+++++++++++ | 21% ~15s
|+++++++++++ | 22% ~15s
|++++++++++++ | 23% ~15s
|+++++++++++++ | 24% ~15s
|+++++++++++++ | 25% ~15s
|++++++++++++++ | 26% ~14s
|++++++++++++++ | 27% ~14s
|+++++++++++++++ | 29% ~14s
|+++++++++++++++ | 30% ~14s
|++++++++++++++++ | 31% ~13s
|++++++++++++++++ | 32% ~13s
|+++++++++++++++++ | 33% ~13s
|++++++++++++++++++ | 34% ~13s
|++++++++++++++++++ | 35% ~12s
|+++++++++++++++++++ | 36% ~12s
|+++++++++++++++++++ | 37% ~12s
|++++++++++++++++++++ | 38% ~12s
|++++++++++++++++++++ | 40% ~11s
|+++++++++++++++++++++ | 41% ~11s
|+++++++++++++++++++++ | 42% ~11s
|++++++++++++++++++++++ | 43% ~11s
|++++++++++++++++++++++ | 44% ~11s
|+++++++++++++++++++++++ | 45% ~10s
|++++++++++++++++++++++++ | 46% ~10s
|++++++++++++++++++++++++ | 47% ~10s
|+++++++++++++++++++++++++ | 48% ~10s
|+++++++++++++++++++++++++ | 49% ~09s
|++++++++++++++++++++++++++ | 51% ~09s
|++++++++++++++++++++++++++ | 52% ~09s
|+++++++++++++++++++++++++++ | 53% ~09s
|+++++++++++++++++++++++++++ | 54% ~09s
|++++++++++++++++++++++++++++ | 55% ~08s
|+++++++++++++++++++++++++++++ | 56% ~08s
|+++++++++++++++++++++++++++++ | 57% ~08s
|++++++++++++++++++++++++++++++ | 58% ~08s
|++++++++++++++++++++++++++++++ | 59% ~08s
|+++++++++++++++++++++++++++++++ | 60% ~07s
|+++++++++++++++++++++++++++++++ | 62% ~07s
|++++++++++++++++++++++++++++++++ | 63% ~07s
|++++++++++++++++++++++++++++++++ | 64% ~07s
|+++++++++++++++++++++++++++++++++ | 65% ~07s
|+++++++++++++++++++++++++++++++++ | 66% ~06s
|++++++++++++++++++++++++++++++++++ | 67% ~06s
|+++++++++++++++++++++++++++++++++++ | 68% ~06s
|+++++++++++++++++++++++++++++++++++ | 69% ~06s
|++++++++++++++++++++++++++++++++++++ | 70% ~06s
|++++++++++++++++++++++++++++++++++++ | 71% ~05s
|+++++++++++++++++++++++++++++++++++++ | 73% ~05s
|+++++++++++++++++++++++++++++++++++++ | 74% ~05s
|++++++++++++++++++++++++++++++++++++++ | 75% ~05s
|++++++++++++++++++++++++++++++++++++++ | 76% ~05s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~04s
|++++++++++++++++++++++++++++++++++++++++ | 78% ~04s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~04s
|+++++++++++++++++++++++++++++++++++++++++ | 80% ~04s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~04s
|++++++++++++++++++++++++++++++++++++++++++ | 82% ~03s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~03s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~03s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~03s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~02s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++ | 90% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~01s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~01s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 19s
| | 0 % ~calculating
|+ | 1 % ~13s
|++ | 2 % ~11s
|++ | 4 % ~11s
|+++ | 5 % ~10s
|++++ | 6 % ~10s
|++++ | 7 % ~10s
|+++++ | 8 % ~10s
|+++++ | 10% ~09s
|++++++ | 11% ~10s
|+++++++ | 12% ~09s
|+++++++ | 13% ~09s
|++++++++ | 14% ~09s
|++++++++ | 16% ~09s
|+++++++++ | 17% ~09s
|++++++++++ | 18% ~08s
|++++++++++ | 19% ~08s
|+++++++++++ | 20% ~08s
|+++++++++++ | 22% ~08s
|++++++++++++ | 23% ~08s
|+++++++++++++ | 24% ~08s
|+++++++++++++ | 25% ~08s
|++++++++++++++ | 27% ~08s
|++++++++++++++ | 28% ~07s
|+++++++++++++++ | 29% ~07s
|++++++++++++++++ | 30% ~07s
|++++++++++++++++ | 31% ~07s
|+++++++++++++++++ | 33% ~07s
|+++++++++++++++++ | 34% ~07s
|++++++++++++++++++ | 35% ~07s
|+++++++++++++++++++ | 36% ~07s
|+++++++++++++++++++ | 37% ~06s
|++++++++++++++++++++ | 39% ~06s
|++++++++++++++++++++ | 40% ~06s
|+++++++++++++++++++++ | 41% ~06s
|++++++++++++++++++++++ | 42% ~06s
|++++++++++++++++++++++ | 43% ~06s
|+++++++++++++++++++++++ | 45% ~06s
|+++++++++++++++++++++++ | 46% ~06s
|++++++++++++++++++++++++ | 47% ~05s
|+++++++++++++++++++++++++ | 48% ~05s
|+++++++++++++++++++++++++ | 49% ~05s
|++++++++++++++++++++++++++ | 51% ~05s
|++++++++++++++++++++++++++ | 52% ~05s
|+++++++++++++++++++++++++++ | 53% ~05s
|++++++++++++++++++++++++++++ | 54% ~05s
|++++++++++++++++++++++++++++ | 55% ~05s
|+++++++++++++++++++++++++++++ | 57% ~04s
|+++++++++++++++++++++++++++++ | 58% ~04s
|++++++++++++++++++++++++++++++ | 59% ~04s
|+++++++++++++++++++++++++++++++ | 60% ~04s
|+++++++++++++++++++++++++++++++ | 61% ~04s
|++++++++++++++++++++++++++++++++ | 63% ~04s
|++++++++++++++++++++++++++++++++ | 64% ~04s
|+++++++++++++++++++++++++++++++++ | 65% ~04s
|++++++++++++++++++++++++++++++++++ | 66% ~04s
|++++++++++++++++++++++++++++++++++ | 67% ~03s
|+++++++++++++++++++++++++++++++++++ | 69% ~03s
|+++++++++++++++++++++++++++++++++++ | 70% ~03s
|++++++++++++++++++++++++++++++++++++ | 71% ~03s
|+++++++++++++++++++++++++++++++++++++ | 72% ~03s
|+++++++++++++++++++++++++++++++++++++ | 73% ~03s
|++++++++++++++++++++++++++++++++++++++ | 75% ~03s
|++++++++++++++++++++++++++++++++++++++ | 76% ~03s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~02s
|++++++++++++++++++++++++++++++++++++++++ | 78% ~02s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~02s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~02s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~02s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~02s
|+++++++++++++++++++++++++++++++++++++++++++ | 84% ~02s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~02s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~01s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~01s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++ | 90% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~01s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~01s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~01s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 10s
print(x = head(x= marker10, n = 30))
Which markers identify a specific cluster?
clust.markers <- FindMarkers(object = tiss, ident.1 = 2, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)
| | 0 % ~calculating
|+ | 1 % ~26s
|++ | 2 % ~27s
|++ | 3 % ~26s
|+++ | 4 % ~25s
|+++ | 5 % ~25s
|++++ | 6 % ~24s
|++++ | 7 % ~24s
|+++++ | 8 % ~24s
|+++++ | 9 % ~23s
|++++++ | 11% ~23s
|++++++ | 12% ~23s
|+++++++ | 13% ~23s
|+++++++ | 14% ~22s
|++++++++ | 15% ~22s
|++++++++ | 16% ~22s
|+++++++++ | 17% ~22s
|+++++++++ | 18% ~21s
|++++++++++ | 19% ~21s
|++++++++++ | 20% ~21s
|+++++++++++ | 21% ~21s
|++++++++++++ | 22% ~21s
|++++++++++++ | 23% ~20s
|+++++++++++++ | 24% ~20s
|+++++++++++++ | 25% ~20s
|++++++++++++++ | 26% ~19s
|++++++++++++++ | 27% ~19s
|+++++++++++++++ | 28% ~19s
|+++++++++++++++ | 29% ~19s
|++++++++++++++++ | 31% ~18s
|++++++++++++++++ | 32% ~18s
|+++++++++++++++++ | 33% ~18s
|+++++++++++++++++ | 34% ~18s
|++++++++++++++++++ | 35% ~17s
|++++++++++++++++++ | 36% ~17s
|+++++++++++++++++++ | 37% ~17s
|+++++++++++++++++++ | 38% ~16s
|++++++++++++++++++++ | 39% ~16s
|++++++++++++++++++++ | 40% ~16s
|+++++++++++++++++++++ | 41% ~16s
|++++++++++++++++++++++ | 42% ~15s
|++++++++++++++++++++++ | 43% ~15s
|+++++++++++++++++++++++ | 44% ~15s
|+++++++++++++++++++++++ | 45% ~15s
|++++++++++++++++++++++++ | 46% ~15s
|++++++++++++++++++++++++ | 47% ~14s
|+++++++++++++++++++++++++ | 48% ~14s
|+++++++++++++++++++++++++ | 49% ~14s
|++++++++++++++++++++++++++ | 51% ~14s
|++++++++++++++++++++++++++ | 52% ~14s
|+++++++++++++++++++++++++++ | 53% ~13s
|+++++++++++++++++++++++++++ | 54% ~13s
|++++++++++++++++++++++++++++ | 55% ~13s
|++++++++++++++++++++++++++++ | 56% ~13s
|+++++++++++++++++++++++++++++ | 57% ~12s
|+++++++++++++++++++++++++++++ | 58% ~12s
|++++++++++++++++++++++++++++++ | 59% ~12s
|++++++++++++++++++++++++++++++ | 60% ~11s
|+++++++++++++++++++++++++++++++ | 61% ~11s
|++++++++++++++++++++++++++++++++ | 62% ~11s
|++++++++++++++++++++++++++++++++ | 63% ~11s
|+++++++++++++++++++++++++++++++++ | 64% ~10s
|+++++++++++++++++++++++++++++++++ | 65% ~10s
|++++++++++++++++++++++++++++++++++ | 66% ~10s
|++++++++++++++++++++++++++++++++++ | 67% ~09s
|+++++++++++++++++++++++++++++++++++ | 68% ~09s
|+++++++++++++++++++++++++++++++++++ | 69% ~09s
|++++++++++++++++++++++++++++++++++++ | 71% ~08s
|++++++++++++++++++++++++++++++++++++ | 72% ~08s
|+++++++++++++++++++++++++++++++++++++ | 73% ~08s
|+++++++++++++++++++++++++++++++++++++ | 74% ~07s
|++++++++++++++++++++++++++++++++++++++ | 75% ~07s
|++++++++++++++++++++++++++++++++++++++ | 76% ~07s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~07s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~06s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~06s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~06s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~05s
|++++++++++++++++++++++++++++++++++++++++++ | 82% ~05s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~05s
|+++++++++++++++++++++++++++++++++++++++++++ | 84% ~04s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~04s
|++++++++++++++++++++++++++++++++++++++++++++ | 86% ~04s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++ | 88% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~01s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 28s
print(x = head(x= clust.markers, n = 30))
You can also compute all markers for all clusters at once. This may take some time.
tiss.markers <- FindAllMarkers(object = tiss, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)
| | 0 % ~calculating
|+ | 1 % ~58s
|++ | 2 % ~53s
|++ | 3 % ~52s
|+++ | 4 % ~50s
|+++ | 5 % ~49s
|++++ | 6 % ~49s
|++++ | 7 % ~48s
|+++++ | 8 % ~48s
|+++++ | 9 % ~47s
|++++++ | 10% ~47s
|++++++ | 11% ~46s
|+++++++ | 12% ~46s
|+++++++ | 13% ~46s
|++++++++ | 14% ~45s
|++++++++ | 15% ~45s
|+++++++++ | 16% ~44s
|+++++++++ | 17% ~44s
|++++++++++ | 18% ~43s
|++++++++++ | 19% ~42s
|+++++++++++ | 20% ~42s
|+++++++++++ | 21% ~42s
|++++++++++++ | 22% ~41s
|++++++++++++ | 23% ~40s
|+++++++++++++ | 24% ~40s
|+++++++++++++ | 25% ~39s
|++++++++++++++ | 26% ~39s
|++++++++++++++ | 27% ~38s
|+++++++++++++++ | 28% ~38s
|+++++++++++++++ | 29% ~37s
|++++++++++++++++ | 30% ~36s
|++++++++++++++++ | 31% ~36s
|+++++++++++++++++ | 32% ~35s
|+++++++++++++++++ | 33% ~35s
|++++++++++++++++++ | 34% ~34s
|++++++++++++++++++ | 35% ~34s
|+++++++++++++++++++ | 36% ~33s
|+++++++++++++++++++ | 37% ~33s
|++++++++++++++++++++ | 38% ~32s
|++++++++++++++++++++ | 39% ~32s
|+++++++++++++++++++++ | 40% ~31s
|+++++++++++++++++++++ | 41% ~31s
|++++++++++++++++++++++ | 42% ~30s
|++++++++++++++++++++++ | 43% ~30s
|+++++++++++++++++++++++ | 44% ~29s
|+++++++++++++++++++++++ | 45% ~28s
|++++++++++++++++++++++++ | 46% ~28s
|++++++++++++++++++++++++ | 47% ~27s
|+++++++++++++++++++++++++ | 48% ~27s
|+++++++++++++++++++++++++ | 49% ~26s
|++++++++++++++++++++++++++ | 51% ~26s
|++++++++++++++++++++++++++ | 52% ~25s
|+++++++++++++++++++++++++++ | 53% ~25s
|+++++++++++++++++++++++++++ | 54% ~24s
|++++++++++++++++++++++++++++ | 55% ~24s
|++++++++++++++++++++++++++++ | 56% ~23s
|+++++++++++++++++++++++++++++ | 57% ~23s
|+++++++++++++++++++++++++++++ | 58% ~22s
|++++++++++++++++++++++++++++++ | 59% ~22s
|++++++++++++++++++++++++++++++ | 60% ~21s
|+++++++++++++++++++++++++++++++ | 61% ~21s
|+++++++++++++++++++++++++++++++ | 62% ~20s
|++++++++++++++++++++++++++++++++ | 63% ~20s
|++++++++++++++++++++++++++++++++ | 64% ~19s
|+++++++++++++++++++++++++++++++++ | 65% ~19s
|+++++++++++++++++++++++++++++++++ | 66% ~18s
|++++++++++++++++++++++++++++++++++ | 67% ~18s
|++++++++++++++++++++++++++++++++++ | 68% ~17s
|+++++++++++++++++++++++++++++++++++ | 69% ~16s
|+++++++++++++++++++++++++++++++++++ | 70% ~16s
|++++++++++++++++++++++++++++++++++++ | 71% ~16s
|++++++++++++++++++++++++++++++++++++ | 72% ~15s
|+++++++++++++++++++++++++++++++++++++ | 73% ~15s
|+++++++++++++++++++++++++++++++++++++ | 74% ~14s
|++++++++++++++++++++++++++++++++++++++ | 75% ~14s
|++++++++++++++++++++++++++++++++++++++ | 76% ~13s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~13s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~12s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~11s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~11s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~10s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~10s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~09s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~09s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~08s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~08s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~07s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 54s
| | 0 % ~calculating
|+ | 1 % ~01m 04s
|++ | 2 % ~01m 00s
|++ | 3 % ~59s
|+++ | 4 % ~57s
|+++ | 5 % ~57s
|++++ | 6 % ~56s
|++++ | 7 % ~56s
|+++++ | 8 % ~55s
|+++++ | 9 % ~54s
|++++++ | 10% ~54s
|++++++ | 11% ~53s
|+++++++ | 12% ~53s
|+++++++ | 13% ~53s
|++++++++ | 14% ~52s
|++++++++ | 15% ~51s
|+++++++++ | 16% ~51s
|+++++++++ | 17% ~50s
|++++++++++ | 18% ~50s
|++++++++++ | 19% ~49s
|+++++++++++ | 20% ~48s
|+++++++++++ | 21% ~48s
|++++++++++++ | 22% ~47s
|++++++++++++ | 23% ~46s
|+++++++++++++ | 24% ~45s
|+++++++++++++ | 26% ~45s
|++++++++++++++ | 27% ~44s
|++++++++++++++ | 28% ~43s
|+++++++++++++++ | 29% ~43s
|+++++++++++++++ | 30% ~42s
|++++++++++++++++ | 31% ~42s
|++++++++++++++++ | 32% ~41s
|+++++++++++++++++ | 33% ~40s
|+++++++++++++++++ | 34% ~40s
|++++++++++++++++++ | 35% ~39s
|++++++++++++++++++ | 36% ~38s
|+++++++++++++++++++ | 37% ~38s
|+++++++++++++++++++ | 38% ~37s
|++++++++++++++++++++ | 39% ~37s
|++++++++++++++++++++ | 40% ~36s
|+++++++++++++++++++++ | 41% ~35s
|+++++++++++++++++++++ | 42% ~35s
|++++++++++++++++++++++ | 43% ~34s
|++++++++++++++++++++++ | 44% ~34s
|+++++++++++++++++++++++ | 45% ~33s
|+++++++++++++++++++++++ | 46% ~32s
|++++++++++++++++++++++++ | 47% ~32s
|++++++++++++++++++++++++ | 48% ~31s
|+++++++++++++++++++++++++ | 49% ~31s
|+++++++++++++++++++++++++ | 50% ~30s
|++++++++++++++++++++++++++ | 51% ~29s
|+++++++++++++++++++++++++++ | 52% ~29s
|+++++++++++++++++++++++++++ | 53% ~28s
|++++++++++++++++++++++++++++ | 54% ~27s
|++++++++++++++++++++++++++++ | 55% ~27s
|+++++++++++++++++++++++++++++ | 56% ~26s
|+++++++++++++++++++++++++++++ | 57% ~26s
|++++++++++++++++++++++++++++++ | 58% ~25s
|++++++++++++++++++++++++++++++ | 59% ~24s
|+++++++++++++++++++++++++++++++ | 60% ~24s
|+++++++++++++++++++++++++++++++ | 61% ~23s
|++++++++++++++++++++++++++++++++ | 62% ~23s
|++++++++++++++++++++++++++++++++ | 63% ~22s
|+++++++++++++++++++++++++++++++++ | 64% ~21s
|+++++++++++++++++++++++++++++++++ | 65% ~21s
|++++++++++++++++++++++++++++++++++ | 66% ~20s
|++++++++++++++++++++++++++++++++++ | 67% ~20s
|+++++++++++++++++++++++++++++++++++ | 68% ~19s
|+++++++++++++++++++++++++++++++++++ | 69% ~18s
|++++++++++++++++++++++++++++++++++++ | 70% ~18s
|++++++++++++++++++++++++++++++++++++ | 71% ~17s
|+++++++++++++++++++++++++++++++++++++ | 72% ~17s
|+++++++++++++++++++++++++++++++++++++ | 73% ~16s
|++++++++++++++++++++++++++++++++++++++ | 74% ~15s
|++++++++++++++++++++++++++++++++++++++ | 76% ~15s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~14s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~13s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~13s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~12s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~12s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~11s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~10s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~10s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~09s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~09s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~08s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~06s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~06s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 59s
| | 0 % ~calculating
|+ | 1 % ~01m 33s
|++ | 2 % ~01m 29s
|++ | 3 % ~01m 27s
|+++ | 4 % ~01m 26s
|+++ | 5 % ~01m 26s
|++++ | 6 % ~01m 24s
|++++ | 7 % ~01m 23s
|+++++ | 8 % ~01m 22s
|+++++ | 9 % ~01m 21s
|++++++ | 10% ~01m 20s
|++++++ | 11% ~01m 19s
|+++++++ | 12% ~01m 20s
|+++++++ | 13% ~01m 21s
|++++++++ | 14% ~01m 21s
|++++++++ | 15% ~01m 21s
|+++++++++ | 16% ~01m 19s
|+++++++++ | 17% ~01m 18s
|++++++++++ | 18% ~01m 17s
|++++++++++ | 19% ~01m 16s
|+++++++++++ | 20% ~01m 15s
|+++++++++++ | 21% ~01m 14s
|++++++++++++ | 22% ~01m 13s
|++++++++++++ | 23% ~01m 12s
|+++++++++++++ | 24% ~01m 11s
|+++++++++++++ | 25% ~01m 10s
|++++++++++++++ | 26% ~01m 08s
|++++++++++++++ | 27% ~01m 07s
|+++++++++++++++ | 28% ~01m 06s
|+++++++++++++++ | 29% ~01m 06s
|++++++++++++++++ | 30% ~01m 05s
|++++++++++++++++ | 31% ~01m 04s
|+++++++++++++++++ | 32% ~01m 03s
|+++++++++++++++++ | 33% ~01m 02s
|++++++++++++++++++ | 34% ~01m 01s
|++++++++++++++++++ | 35% ~01m 00s
|+++++++++++++++++++ | 36% ~59s
|+++++++++++++++++++ | 37% ~58s
|++++++++++++++++++++ | 38% ~57s
|++++++++++++++++++++ | 39% ~56s
|+++++++++++++++++++++ | 40% ~55s
|+++++++++++++++++++++ | 41% ~54s
|++++++++++++++++++++++ | 42% ~53s
|++++++++++++++++++++++ | 43% ~52s
|+++++++++++++++++++++++ | 44% ~52s
|+++++++++++++++++++++++ | 45% ~51s
|++++++++++++++++++++++++ | 46% ~50s
|++++++++++++++++++++++++ | 47% ~49s
|+++++++++++++++++++++++++ | 48% ~48s
|+++++++++++++++++++++++++ | 49% ~47s
|++++++++++++++++++++++++++ | 51% ~46s
|++++++++++++++++++++++++++ | 52% ~45s
|+++++++++++++++++++++++++++ | 53% ~44s
|+++++++++++++++++++++++++++ | 54% ~43s
|++++++++++++++++++++++++++++ | 55% ~42s
|++++++++++++++++++++++++++++ | 56% ~41s
|+++++++++++++++++++++++++++++ | 57% ~40s
|+++++++++++++++++++++++++++++ | 58% ~39s
|++++++++++++++++++++++++++++++ | 59% ~38s
|++++++++++++++++++++++++++++++ | 60% ~37s
|+++++++++++++++++++++++++++++++ | 61% ~36s
|+++++++++++++++++++++++++++++++ | 62% ~35s
|++++++++++++++++++++++++++++++++ | 63% ~34s
|++++++++++++++++++++++++++++++++ | 64% ~34s
|+++++++++++++++++++++++++++++++++ | 65% ~33s
|+++++++++++++++++++++++++++++++++ | 66% ~32s
|++++++++++++++++++++++++++++++++++ | 67% ~31s
|++++++++++++++++++++++++++++++++++ | 68% ~30s
|+++++++++++++++++++++++++++++++++++ | 69% ~29s
|+++++++++++++++++++++++++++++++++++ | 70% ~28s
|++++++++++++++++++++++++++++++++++++ | 71% ~27s
|++++++++++++++++++++++++++++++++++++ | 72% ~26s
|+++++++++++++++++++++++++++++++++++++ | 73% ~25s
|+++++++++++++++++++++++++++++++++++++ | 74% ~24s
|++++++++++++++++++++++++++++++++++++++ | 75% ~23s
|++++++++++++++++++++++++++++++++++++++ | 76% ~22s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~22s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~21s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~20s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~19s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~18s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~17s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~16s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~15s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~14s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~13s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~12s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~11s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~10s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~09s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~08s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~06s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 32s
| | 0 % ~calculating
|+ | 1 % ~01m 20s
|++ | 2 % ~01m 12s
|++ | 3 % ~01m 10s
|+++ | 4 % ~01m 07s
|+++ | 5 % ~01m 06s
|++++ | 6 % ~01m 06s
|++++ | 7 % ~01m 04s
|+++++ | 8 % ~01m 04s
|+++++ | 9 % ~01m 03s
|++++++ | 10% ~01m 02s
|++++++ | 11% ~01m 01s
|+++++++ | 12% ~01m 01s
|+++++++ | 13% ~01m 02s
|++++++++ | 14% ~01m 04s
|++++++++ | 15% ~01m 08s
|+++++++++ | 16% ~01m 08s
|+++++++++ | 17% ~01m 07s
|++++++++++ | 18% ~01m 05s
|++++++++++ | 19% ~01m 04s
|+++++++++++ | 20% ~01m 02s
|+++++++++++ | 21% ~01m 01s
|++++++++++++ | 22% ~01m 00s
|++++++++++++ | 23% ~59s
|+++++++++++++ | 24% ~58s
|+++++++++++++ | 25% ~57s
|++++++++++++++ | 26% ~56s
|++++++++++++++ | 27% ~55s
|+++++++++++++++ | 28% ~54s
|+++++++++++++++ | 29% ~53s
|++++++++++++++++ | 30% ~52s
|++++++++++++++++ | 31% ~51s
|+++++++++++++++++ | 32% ~50s
|+++++++++++++++++ | 33% ~49s
|++++++++++++++++++ | 34% ~48s
|++++++++++++++++++ | 35% ~47s
|+++++++++++++++++++ | 36% ~47s
|+++++++++++++++++++ | 37% ~46s
|++++++++++++++++++++ | 38% ~45s
|++++++++++++++++++++ | 39% ~44s
|+++++++++++++++++++++ | 40% ~43s
|+++++++++++++++++++++ | 41% ~42s
|++++++++++++++++++++++ | 42% ~41s
|++++++++++++++++++++++ | 43% ~41s
|+++++++++++++++++++++++ | 44% ~40s
|+++++++++++++++++++++++ | 45% ~39s
|++++++++++++++++++++++++ | 46% ~38s
|++++++++++++++++++++++++ | 47% ~38s
|+++++++++++++++++++++++++ | 48% ~37s
|+++++++++++++++++++++++++ | 49% ~36s
|++++++++++++++++++++++++++ | 51% ~35s
|++++++++++++++++++++++++++ | 52% ~34s
|+++++++++++++++++++++++++++ | 53% ~34s
|+++++++++++++++++++++++++++ | 54% ~33s
|++++++++++++++++++++++++++++ | 55% ~32s
|++++++++++++++++++++++++++++ | 56% ~31s
|+++++++++++++++++++++++++++++ | 57% ~31s
|+++++++++++++++++++++++++++++ | 58% ~30s
|++++++++++++++++++++++++++++++ | 59% ~29s
|++++++++++++++++++++++++++++++ | 60% ~28s
|+++++++++++++++++++++++++++++++ | 61% ~28s
|+++++++++++++++++++++++++++++++ | 62% ~27s
|++++++++++++++++++++++++++++++++ | 63% ~26s
|++++++++++++++++++++++++++++++++ | 64% ~25s
|+++++++++++++++++++++++++++++++++ | 65% ~25s
|+++++++++++++++++++++++++++++++++ | 66% ~24s
|++++++++++++++++++++++++++++++++++ | 67% ~23s
|++++++++++++++++++++++++++++++++++ | 68% ~23s
|+++++++++++++++++++++++++++++++++++ | 69% ~22s
|+++++++++++++++++++++++++++++++++++ | 70% ~21s
|++++++++++++++++++++++++++++++++++++ | 71% ~20s
|++++++++++++++++++++++++++++++++++++ | 72% ~20s
|+++++++++++++++++++++++++++++++++++++ | 73% ~19s
|+++++++++++++++++++++++++++++++++++++ | 74% ~18s
|++++++++++++++++++++++++++++++++++++++ | 75% ~18s
|++++++++++++++++++++++++++++++++++++++ | 76% ~17s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~16s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~15s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~15s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~14s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~13s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~13s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~12s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~11s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~11s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~10s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~09s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~09s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~08s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~07s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~06s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 10s
| | 0 % ~calculating
|+ | 1 % ~57s
|+ | 2 % ~58s
|++ | 3 % ~01m 00s
|++ | 4 % ~01m 02s
|+++ | 5 % ~60s
|+++ | 6 % ~58s
|++++ | 7 % ~57s
|++++ | 8 % ~56s
|+++++ | 9 % ~56s
|+++++ | 10% ~55s
|++++++ | 11% ~54s
|++++++ | 12% ~53s
|+++++++ | 13% ~52s
|+++++++ | 14% ~52s
|++++++++ | 15% ~51s
|++++++++ | 16% ~50s
|+++++++++ | 17% ~50s
|+++++++++ | 18% ~49s
|++++++++++ | 19% ~48s
|++++++++++ | 20% ~48s
|+++++++++++ | 21% ~47s
|+++++++++++ | 22% ~46s
|++++++++++++ | 23% ~45s
|++++++++++++ | 24% ~45s
|+++++++++++++ | 25% ~44s
|+++++++++++++ | 26% ~44s
|++++++++++++++ | 27% ~43s
|++++++++++++++ | 28% ~43s
|+++++++++++++++ | 29% ~42s
|+++++++++++++++ | 30% ~42s
|++++++++++++++++ | 31% ~41s
|++++++++++++++++ | 32% ~40s
|+++++++++++++++++ | 33% ~40s
|+++++++++++++++++ | 34% ~39s
|++++++++++++++++++ | 35% ~39s
|++++++++++++++++++ | 36% ~38s
|+++++++++++++++++++ | 37% ~37s
|+++++++++++++++++++ | 38% ~37s
|++++++++++++++++++++ | 39% ~36s
|++++++++++++++++++++ | 40% ~35s
|+++++++++++++++++++++ | 41% ~35s
|+++++++++++++++++++++ | 42% ~34s
|++++++++++++++++++++++ | 43% ~34s
|++++++++++++++++++++++ | 44% ~33s
|+++++++++++++++++++++++ | 45% ~32s
|+++++++++++++++++++++++ | 46% ~32s
|++++++++++++++++++++++++ | 47% ~31s
|++++++++++++++++++++++++ | 48% ~31s
|+++++++++++++++++++++++++ | 49% ~30s
|+++++++++++++++++++++++++ | 50% ~29s
|++++++++++++++++++++++++++ | 51% ~29s
|++++++++++++++++++++++++++ | 52% ~28s
|+++++++++++++++++++++++++++ | 53% ~28s
|+++++++++++++++++++++++++++ | 54% ~27s
|++++++++++++++++++++++++++++ | 55% ~26s
|++++++++++++++++++++++++++++ | 56% ~26s
|+++++++++++++++++++++++++++++ | 57% ~25s
|+++++++++++++++++++++++++++++ | 58% ~25s
|++++++++++++++++++++++++++++++ | 59% ~24s
|++++++++++++++++++++++++++++++ | 60% ~23s
|+++++++++++++++++++++++++++++++ | 61% ~23s
|+++++++++++++++++++++++++++++++ | 62% ~22s
|++++++++++++++++++++++++++++++++ | 63% ~22s
|++++++++++++++++++++++++++++++++ | 64% ~21s
|+++++++++++++++++++++++++++++++++ | 65% ~21s
|+++++++++++++++++++++++++++++++++ | 66% ~20s
|++++++++++++++++++++++++++++++++++ | 67% ~19s
|++++++++++++++++++++++++++++++++++ | 68% ~19s
|+++++++++++++++++++++++++++++++++++ | 69% ~18s
|+++++++++++++++++++++++++++++++++++ | 70% ~18s
|++++++++++++++++++++++++++++++++++++ | 71% ~17s
|++++++++++++++++++++++++++++++++++++ | 72% ~16s
|+++++++++++++++++++++++++++++++++++++ | 73% ~16s
|+++++++++++++++++++++++++++++++++++++ | 74% ~15s
|++++++++++++++++++++++++++++++++++++++ | 75% ~15s
|++++++++++++++++++++++++++++++++++++++ | 76% ~14s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~14s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~13s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~12s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~12s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~11s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~11s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~10s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~09s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~09s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~08s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~08s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~06s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 58s
| | 0 % ~calculating
|+ | 1 % ~01m 50s
|++ | 2 % ~01m 49s
|++ | 3 % ~01m 48s
|+++ | 4 % ~01m 49s
|+++ | 5 % ~01m 51s
|++++ | 6 % ~01m 53s
|++++ | 7 % ~01m 55s
|+++++ | 8 % ~01m 52s
|+++++ | 9 % ~01m 50s
|++++++ | 10% ~01m 47s
|++++++ | 11% ~01m 47s
|+++++++ | 12% ~01m 45s
|+++++++ | 13% ~01m 43s
|++++++++ | 14% ~01m 42s
|++++++++ | 15% ~01m 40s
|+++++++++ | 16% ~01m 39s
|+++++++++ | 17% ~01m 38s
|++++++++++ | 18% ~01m 37s
|++++++++++ | 19% ~01m 35s
|+++++++++++ | 20% ~01m 34s
|+++++++++++ | 21% ~01m 32s
|++++++++++++ | 22% ~01m 32s
|++++++++++++ | 23% ~01m 30s
|+++++++++++++ | 24% ~01m 29s
|+++++++++++++ | 26% ~01m 28s
|++++++++++++++ | 27% ~01m 26s
|++++++++++++++ | 28% ~01m 25s
|+++++++++++++++ | 29% ~01m 24s
|+++++++++++++++ | 30% ~01m 23s
|++++++++++++++++ | 31% ~01m 22s
|++++++++++++++++ | 32% ~01m 20s
|+++++++++++++++++ | 33% ~01m 19s
|+++++++++++++++++ | 34% ~01m 18s
|++++++++++++++++++ | 35% ~01m 17s
|++++++++++++++++++ | 36% ~01m 15s
|+++++++++++++++++++ | 37% ~01m 14s
|+++++++++++++++++++ | 38% ~01m 13s
|++++++++++++++++++++ | 39% ~01m 12s
|++++++++++++++++++++ | 40% ~01m 11s
|+++++++++++++++++++++ | 41% ~01m 09s
|+++++++++++++++++++++ | 42% ~01m 08s
|++++++++++++++++++++++ | 43% ~01m 07s
|++++++++++++++++++++++ | 44% ~01m 06s
|+++++++++++++++++++++++ | 45% ~01m 05s
|+++++++++++++++++++++++ | 46% ~01m 04s
|++++++++++++++++++++++++ | 47% ~01m 03s
|++++++++++++++++++++++++ | 48% ~01m 01s
|+++++++++++++++++++++++++ | 49% ~60s
|+++++++++++++++++++++++++ | 50% ~59s
|++++++++++++++++++++++++++ | 51% ~57s
|+++++++++++++++++++++++++++ | 52% ~56s
|+++++++++++++++++++++++++++ | 53% ~55s
|++++++++++++++++++++++++++++ | 54% ~54s
|++++++++++++++++++++++++++++ | 55% ~52s
|+++++++++++++++++++++++++++++ | 56% ~51s
|+++++++++++++++++++++++++++++ | 57% ~50s
|++++++++++++++++++++++++++++++ | 58% ~49s
|++++++++++++++++++++++++++++++ | 59% ~48s
|+++++++++++++++++++++++++++++++ | 60% ~46s
|+++++++++++++++++++++++++++++++ | 61% ~45s
|++++++++++++++++++++++++++++++++ | 62% ~44s
|++++++++++++++++++++++++++++++++ | 63% ~43s
|+++++++++++++++++++++++++++++++++ | 64% ~42s
|+++++++++++++++++++++++++++++++++ | 65% ~40s
|++++++++++++++++++++++++++++++++++ | 66% ~39s
|++++++++++++++++++++++++++++++++++ | 67% ~38s
|+++++++++++++++++++++++++++++++++++ | 68% ~37s
|+++++++++++++++++++++++++++++++++++ | 69% ~36s
|++++++++++++++++++++++++++++++++++++ | 70% ~34s
|++++++++++++++++++++++++++++++++++++ | 71% ~33s
|+++++++++++++++++++++++++++++++++++++ | 72% ~32s
|+++++++++++++++++++++++++++++++++++++ | 73% ~31s
|++++++++++++++++++++++++++++++++++++++ | 74% ~29s
|++++++++++++++++++++++++++++++++++++++ | 76% ~28s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~27s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~26s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~25s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~24s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~22s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~21s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~20s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~19s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~18s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~17s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~15s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~14s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~13s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~12s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~11s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~10s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~08s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~07s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~06s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 56s
Display the top markers you computed above.
tiss.markers %>% group_by(cluster)
At a coarse level, we can use canonical markers to match the unbiased clustering to known cell types:
0: Basal/differentiating cells 1: Basal/differentiating cells 2: Proliferating cells 3: Maturing/nonkeratinizing cells 4: Basal/differentiating cells 5: Stratified/differentiated keratinocytes 6: Basal/differentiating cells 7: Filliform Keratinocytes
# stash current cluster IDs
tiss <- StashIdent(object = tiss, save.name = "cluster.ids")
# enumerate current cluster IDs and the labels for them
cluster.ids <- c(0, 1, 2, 3, 4, 5, 6, 7)
cell_ontology_class <- c("basal cell of epidermis", "basal cell of epidermis", "keratinocyte", "keratinocyte", "basal cell of epidermis", "keratinocyte", "basal cell of epidermis", "keratinocyte" )
cell_ontology_id <- c("CL:0000312", "CL:0000312", "CL:0000312", "CL:0000312", "CL:0000312", "CL:0000312", "CL:0000312", "CL:0000312" )
tiss@meta.data[,'cell_ontology_class'] <- plyr::mapvalues(x = tiss@ident, from = cluster.ids, to = cell_ontology_class)
tiss@meta.data[,'cell_ontology_id'] <- plyr::mapvalues(x = tiss@ident, from = cluster.ids, to = cell_ontology_id)
tiss@meta.data[tiss@cell.names,'cell_ontology_class'] <- as.character(tiss@meta.data$cell_ontology_class)
tiss@meta.data[tiss@cell.names,'cell_ontology_id'] <- as.character(tiss@meta.data$cell_ontology_id)
TSNEPlot(object = tiss, do.label = TRUE, pt.size = 1, label.size = 3, group.by='cell_ontology_class', do.return = TRUE)
#dev.copy(png,'annotated_plot-2.png')
#dev.off()
Color by metadata, like plate barcode, to check for batch effects.
TSNEPlot(object = tiss, do.return = TRUE, group.by = "mouse.sex")
Print a table showing the count of cells in each identity category from each plate.
table(as.character(tiss@ident), as.character(tiss@meta.data$plate.barcode))
When you save the annotated tissue, please give it a name.
filename = here('00_data_ingest', '04_tissue_robj_generated',
paste0("facs", tissue_of_interest, "_seurat_tiss.Robj"))
print(filename)
save(tiss, file=filename)
# To reload a saved object
filename = here('00_data_ingest', '04_tissue_robj_generated',
paste0("facs", tissue_of_interest, "_seurat_tiss.Robj"))
load(file=filename)
So that Biohub can easily combine all your cell_ontology_classs, please export them as a simple csv.
head(tiss@meta.data)
filename = here('00_data_ingest', '03_tissue_cell_ontology_class_csv',
paste0(tissue_of_interest, "_cell_ontology_class.csv"))
write.csv(tiss@meta.data[,c('plate.barcode','cell_ontology_class','cell_ontology_id')], file=filename)